package com.cmc.cloud.cmclink.doc.convert;

import com.cmc.cloud.cmclink.doc.api.document.rep.SoRespDto;
import com.cmc.cloud.cmclink.doc.api.document.req.so.FileUploadRespDto;
import com.cmc.cloud.cmclink.doc.api.document.req.so.SoUpdateReqDto;
import com.cmc.cloud.cmclink.doc.entity.SoDO;
import com.cmc.cloud.cmclink.doc.mq.SoEdiReqVO;
import com.cmc.cloud.cmclink.doc.vo.sovo.approvespacevo.ApproveSpaceResVO;
import com.cmc.cloud.cmclink.doc.vo.sovo.sovo.FileUploadRespVo;
import com.cmc.cloud.cmclink.doc.vo.sovo.sovo.SoCreateReqVO;
import com.cmc.cloud.cmclink.doc.vo.sovo.sovo.SoRespVO;
import com.cmc.cloud.cmclink.doc.vo.sovo.sovo.SoUpdateReqVO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * 订舱主 Convert
 *
 * @author 招商轮船-管理员
 */
@Mapper
public interface SoConvert {

    SoConvert INSTANCE = Mappers.getMapper(SoConvert.class);

    /**
     * 属性转换 convert
     *
     * @param bean bean
     * @return obj SoDO
     */
    SoDO convert(SoRespVO bean);

    /**
     * 属性转换 convert
     *
     * @param bean bean
     * @return obj
     */
    SoDO convert(SoCreateReqVO bean);

    /**
     * 属性转换 convert
     *
     * @param bean bean
     * @return obj SoDO
     */
    SoDO convert(SoUpdateReqVO bean);

    /**
     * 属性转换 convert
     *
     * @param bean bean
     * @return obj SoRespVO
     */
    SoRespVO convert(SoDO bean);

    /**
     * 属性转换 convert
     *
     * @param bean bean
     * @return obj SoCreateReqVO
     */
    SoCreateReqVO convertCreate(SoDO bean);

    /**
     * 属性转换 convert
     *
     * @param list list
     * @return obj List<SoRespVO>
     */
    List<SoRespVO> convertList(List<SoDO> list);

    /**
     * 属性转换
     *
     * @param list list
     * @return obj
     */
    List<SoRespDto> convertSoRespDto(List<SoDO> list);

    /**
     * convertSoDO 给上面的convertSoRespDto用
     *
     * @param soDO soDO
     * @return obj
     */
    @Mapping(target = "createTime", source = "createTime", dateFormat = "yyyy-MM-dd HH:mm:ss")
    @Mapping(target = "updateTime", source = "updateTime", dateFormat = "yyyy-MM-dd HH:mm:ss")
    SoRespDto convertSoDO(SoDO soDO);


    /**
     * 属性转换 convert
     *
     * @param soDOList soDO
     * @return obj List<ApproveSpaceResVO>
     */
    List<ApproveSpaceResVO> convertApproveSpace(List<SoDO> soDOList);

    /**
     * 属性转换
     *
     * @param soUpdateReqDto bean
     * @return obj SoUpdateReqVO
     */
    SoUpdateReqVO convetSoUpdateReqDto(SoUpdateReqDto soUpdateReqDto);

    /**
     * EDI属性转换
     *
     * @param data data
     * @return obj SoUpdateReqVO
     */
    SoUpdateReqVO convetSoUpdateReqDto(SoEdiReqVO.Data data);

    /**
     * 属性转换
     *
     * @param soDO soDO
     * @return obj
     */
    SoUpdateReqDto convertSoUpdateReqDto(SoDO soDO);

    /**
     * 订舱确认书
     *
     * @param fileUploadRespVo Vo
     * @return obj
     */
    FileUploadRespDto convertFileUploadRespDto(FileUploadRespVo fileUploadRespVo);
}
